package com.github.zyf.ioaj.algorithm;

/**
 * <h1>函数接口</h1>
 * <p>任何一个目标函数都要实现该接口，否则无法构建输入量，自然也无法使用该框架。</p>
 * <p>不过对于本框架而言，不实现这个接口还可以使用{@link com.github.zyf.ioaj.annotation.external.ObjectFunction}注解来使用该框架</p>
 * <p>该接口包含了一个方法，参数是double数组，返回值是double</p>
 *
 * @author zyf
 */
public interface Function {

    /**
     * <p>函数实现逻辑</p>
     * <p>
     * 例如函数 y = x^2 + y^2 + z^2 的实现逻辑是：
     * <code>return params[0] * params[0] + params[1] * params[1] + params[2] * params[2];</code>
     *
     * @param params 参数，double数组
     * @return double
     */
    double apply(double[] params);
}
